\documentclass{article}
\usepackage{ctex}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{amsthm,amsmath,amssymb}
\usepackage{mathrsfs}
\usepackage{geometry}
\usepackage{titlesec} 
\usepackage{graphicx}
\usepackage{bm}
\usepackage{float}
\usepackage{subfig}
\definecolor{commentcolor}{RGB}{85,139,78}
\definecolor{stringcolor}{RGB}{206,145,108}
\definecolor{keywordcolor}{RGB}{34,34,250}
\definecolor{backcolor}{RGB}{220,220,220}
\geometry{left = 2.0cm, right = 2.0cm, top = 2.5cm, bottom = 2.5cm}
\title{Survey Of Voice Conversion}
\author{姓名:隋佳成 \and 班级:人工智能91 \and 学号:2193712551}
\date{\today}

\usepackage{accsupp}	
\newcommand{\emptyaccsupp}[1]{\BeginAccSupp{ActualText={}}#1\EndAccSupp{}}

\usepackage{listings}
\lstset{						        %高亮代码设置
	language=python, 					%Python语法高亮
	linewidth=0.9\linewidth,      		%列表list宽度
	%basicstyle=\ttfamily,				%tt无法显示空格
	commentstyle=\color{commentcolor},	%注释颜色
	keywordstyle=\color{keywordcolor},	%关键词颜色
	stringstyle=\color{stringcolor},	%字符串颜色
	%showspaces=true,					%显示空格
	numbers=left,						%行数显示在左侧
	numberstyle=\tiny\emptyaccsupp,		%行数数字格式
	numbersep=5pt,						%数字间隔
	frame=single,						%加框
	framerule=0pt,						%不划线
	escapeinside=@@,					%逃逸标志
	emptylines=1,						%
	xleftmargin=3em,					%list左边距
	backgroundcolor=\color{white},	    %列表背景色
	tabsize=4,							%制表符长度为4个字符
	gobble=4							%忽略每行代码前4个字符
	}

\begin{document}
    \bibliographystyle{plain}
    \newpagestyle{main}{            
        \sethead{}{关于声音转换的调查报告}{}     %设置页眉
        \setfoot{}{\thepage}{}                     %设置页脚，可以在页脚添加 \thepage  显示页数
        \headrule                                  % 添加页眉的下划线                                      %添加页脚的下划线
    }
    \pagestyle{main}                               %使用该style
    \maketitle
    \section*{\kaishu{一 \quad 背景}}
        在人工智能发展的今天，各种各样“神奇”的技术层出不穷，前一阵风靡的AI换脸，在视频中将一个人的脸换成另一个人的脸，且能做到看上去不是那么违和，如果提供学习的样本足够多，还能够在视频中保留原有视频的表情信息，只替换
        人脸信息。同样的，我们想将人的音频信息也能如AI换脸一般，做到不违和，以极高相似度的转换。这便是声音转换(Voice Conversion)。能够容易想到的是，就如同人脸转换一样，声音转换如果比较好的得到了实现，也将会给我们带来
        一些隐私、法律方面的风险，所以如何用AI技术判定声音是否经过转换(最近也读到了关于论文\cite{wang2018videotovideo}vid2vid视频的AI检测论文\cite{alamayreh2021detection})，人脸是否是经过转换得来的，也是将来AI应用发展的一个方向，不过这个不是本次调研的重点，本次调研将重心放在声音转换的发展与现有技术上。

    \section*{\kaishu{二 \quad 任务介绍}}
    具体地说，什么是声音转换(Voice Conversion)?
    其实声音转换的具体任务就是，在保留原有声音的语音意义的条件下，我们需要将一个人的声音转换成另一个人的声音。实际上，声音转换任务具体的还可以分成one-to-one和many-to-many的任务。One-to-one指的就是一个人的声音转换成另一个人的声音，
    many-to-many指的就是输入音频中有多个人的声音信息，也要转换成多个人的声音信息。在第三部分的发展现状及现有方法的介绍中，这两类任务我们都会有相应的调查与介绍。
    \section*{\kaishu{三 \quad 发展现状及现有方法}}

        \subsection*{3.1 \quad 发展现状}
            结合了最新的一些论文来看，我认为声音转换(Voice Conversion)并不能认为发展的很好，就是说还不成熟。在本文涉及到的几篇论文中，有一些论文提供了若干个Sample，就是利用各自论文方法得到的样本，我听过后感觉如今的声音转换
            仍然停留在研究发展的阶段，其“不成熟”主要体现在两个方面，一个是声音质量，另一个是转换相似度。声音质量指的就是转换后声音的流畅性，有无杂音，音频信息有无缺损等等。实际上，有一些Sample中，声音质量下降比较多，能够明显的听出来音频信息的缺损。
            转换相似度指的不仅仅是音色的转换，还有语义的保留。在语义保留部分，大家做的可能比较好了，几个Sample都是基本全部保留了语义内容，但是随之而来的可能就是音色转换的不完美。我特意听了一下，当源声音是和目标声音是异性声音的时候，效果要好于
            两者是同性声音时(不过只是个人感觉)，具体原因还待考究。总的来说，声音转换发展的完全不如AI换脸那样成熟。不过也正是因为这个方向现在还不成熟，研究才更有价值。
        \subsection*{3.2 \quad 现有方法}

        现有的一些方法主要有三个大的方向：
        \begin{enumerate}
            \item [-] 传统的方法(虽然训练的效果可以还不错，但是难以收集大量的平行数据)
            \item [-] 基于VAEs(比较新的方法之一，不需要平行数据)
            \item [-] 基于GANs(比较新的方法之一，不需要平行数据)
        \end{enumerate}

        其中，VAEs通常需要特征分离，就是将源声音中的音色特征和语义特征分离开，通过一系列调整，再合成成为目标声音。
        GANs通常不需要特征分离。

        在此部分，我们介绍几个比较新的，最近几年对于声音转换领域的相关研究成果。有如下几个：
        \begin{enumerate}
            \item [-] CycleGAN-VC 2017.12
            \item [-] StarGAN-VC 2018.7
            \item [-] StarGAN-VC+ASR 2021.8
            \item [-] Many-to-Many Voice Conversion based Feature Disentanglement using Variational Autoencoder 2021.7
        \end{enumerate}
        
        \subsubsection*{3.2.1 \quad CycleGAN-VC}
            论文\cite{kaneko2017paralleldatafree}所研究的方法名字叫CycleGAN-VC，是GAN的一种变体。相比于较为传统的声音转换方法，利用变体GAN的方法往往具有很多优势，比如说，CycleGAN不需要平行数据(parallel data), 所谓平行数据就是指，比如我输入A的语音，转换成B的语音，
            平行数据指数据集中具有A、B同样的话。在一些传统的方法中，依赖于平行数据可能能够取得比较好的结果，但是不能更加广泛地被使用，因为很多时候是无法收集这么多的平行数据的。而CycleGAN-VC不需要依赖与平行数据和时间序列对齐的一系列方法，只需要利用变体GAN即可，为声音转换
            工作带来了很多的方便。值得一提的是，CycleGAN-VC在准确度和语音信息的保留上，相比于传统方法也有了提升。
            首先，说明一下CycleGAN的Loss(注意还不是CycleGAN-VC的Loss).

            CycleGAN最终目的是得到一个由输入数据X到输出数据Y的转移模型$G_{X \rightarrow Y}$，后面简写成$G$，而为了学习这个模型，还需要学习Y到X的转移模型$F_{Y \rightarrow X}$，后面简写为$F$。
            前面所述的G和F均为生成器模型，相对应的就有其判别器模型，实际上，CycleGAN利用了两个损失函数。一个叫对抗损失(adversarial loss).这个比较容易理解，其实就是最普通的GAN里面的生成器和判别器的损失函数。
            \begin{align}
                \mathcal{L}_{\rm adv}^{D_Y}(D_Y) 
                =&- 
                \mathbb{E}_{\Vec{y}\sim p_Y(\Vec{y})}[\log D_Y(\Vec{y})]\nonumber\\
                &-\mathbb{E}_{\Vec{x}\sim p_X(\Vec{x})}[\log (1- D_Y(G(\Vec{x})))],
                \label{eq:cyclegan-advloss_dy}
                \\
                \mathcal{L}_{\rm adv}^{G}(G) 
                =&\mathbb{E}_{\Vec{x}\sim p_X(\Vec{x})}[\log (1- D_Y(G(\Vec{x})))],
                \label{eq:cyclegan-advloss_g}
                \\
                \mathcal{L}_{\rm adv}^{D_X}(D_X) 
                =&-
                \mathbb{E}_{\Vec{x}\sim p_X(\Vec{x})}[\log D_X(\Vec{x})]\nonumber\\
                &-
                \mathbb{E}_{\Vec{y}\sim p_Y(\Vec{y})}[\log (1- D_X(F(\Vec{y})))],
                \label{eq:cyclegan-advloss_dx}
                \\
                \mathcal{L}_{\rm adv}^{F}(F) 
                =&
                \mathbb{E}_{\Vec{y}\sim p_Y(\Vec{y})}[\log (1- D_X(F(\Vec{y})))],
                \label{eq:cyclegan-advloss_f}
            \end{align}
              另一个损失函数是循环一致损失(cycle-consistency loss)。
              \begin{align}
                \mathcal{L}_{\rm cyc}(G,F) 
                &= \mathbb{E}_{\Vec{x}\sim p_X(\Vec{x})}[\| F(G(\Vec{x})) - \Vec{x} \|_1]
                \nonumber\\
                &+\mathbb{E}_{\Vec{y}\sim p_Y(\Vec{y})}[\| G(F(\Vec{y})) - \Vec{y} \|_1],
              \end{align}
              那么为什么要引入这个循环一致损失呢？
              我的理解是要引入保持语义的损失函数部分。就是说，如果只有对抗损失，虽然能够保证能够建立起来X到Y的模型关系，但是无法保证X中的语义信息被保留下来，而新加入的循环一致损失由于存在两个模型，一个是X到Y，另一个是Y到X，
              可以理解为，正向模型和逆向模型都有，也就是说，我需要X经正向变换再经逆向变换之后还是X，至少是接近X的，对Y来说同理，这样一定程度上能够保留X和Y的语义信息。
              于是，我们将上面两个损失函数结合起来，就能得到完整的损失函数。
              \begin{align}
                \mathcal{I}_{G,F}(G,F) =&
                \mathcal{L}_{\rm adv}^{G}(G) +
                \mathcal{L}_{\rm adv}^{F}(F) 
                \nonumber\\
                &+ 
                \lambda_{\rm cyc}
                \mathcal{L}_{\rm cyc}(G,F),\\
                \mathcal{I}_{D}(D_X,D_Y) =&
                \mathcal{L}_{\rm adv}^{D_X}(D_X)
                +
                \mathcal{L}_{\rm adv}^{D_Y}(D_Y),
                \end{align}
              其中$\lambda_{cyc}$是对抗损失和循环一致损失之间的折中系数。$\mathcal{I}_{G,F}(G,F)$是生成器的损失函数，$\mathcal{I}_{D}(D_X,D_Y)$是判别器的损失函数。

              那么下一步，如何更好的保留语义信息呢？
              光靠循环一致损失是不够的。而且，在语音作为输入的条件下，考虑到语音存在着时间序列关系，在神经网络的构建中需要体现出处理时间序列和等级结构的地方，比如由语音意义上的信息，还有非语音意义上的信息(不需要传递的噪声)。
              也就是说，音频信息需要选择性的向下传递。所以作者增加了门控卷积神经网络层(Gated-CNN)。
              第$(l+1)$层的输出$\bm{H}_{l+1}$由上一层的输出$\bm{H}_l$和模型参数 $\bm{W}_l$, $\bm{V}_l$, $\bm{b}_l$, $\bm{c}_l$决定。
                \begin{equation}
                \label{eqn:glu}
                \bm{H}_{l+1} = (\bm{H}_l * \bm{W}_l + \bm{b}_l)
                \otimes \sigma (\bm{H}_l * \bm{V}_l + \bm{c}_l),
                \end{equation}
                其中$\bm{W}_l$, $\bm{V}_l$, $\bm{b}_l$, $\bm{c}_l$是需要训练的参数，通过训练，这样可以做到信息选择性的传递。
                再来解决保留语义信息的问题。如何能更好的让计算机理解语义信息？作者引入了如下的式子。
                \begin{align}
                    \mathcal{L}_{\rm id}(G,F) 
                    &= \mathbb{E}_{\Vec{x}\sim p_X(\Vec{x})}[\| F(\Vec{x}) - \Vec{x} \|_1]
                    \nonumber\\
                    &+\mathbb{E}_{\Vec{y}\sim p_Y(\Vec{y})}[\| G(\Vec{y}) - \Vec{y} \|_1],
                    \end{align}
                你可能会问，这样为什么能更好的让训练保留语义信息？这个式子会使得当目标语音输出是Y的时候，如果我输入数据是Y，那么他会输出Y，或者十分接近Y，简单地说，当输入和目标都是Y的时候，输出也是Y。X也是同理。
                这样一来，假设我模仿我自己，那么我(也就是生成器)必须保留我全部(或接近全部)的语义信息，这样一来，有助于生成器模型更好的学习和保留语义信息。
                所以，最后CycleGAN-VC整体的损失函数就是：
                \begin{align}
                    \mathcal{I}_{G,F}(G,F) =&
                    \mathcal{L}_{\rm adv}^{G}(G) +
                    \mathcal{L}_{\rm adv}^{F}(F) 
                    \nonumber\\
                    &+ 
                    \lambda_{\rm cyc}
                    \mathcal{L}_{\rm cyc}(G,F) + 
                    \lambda_{\rm id}
                    \mathcal{L}_{\rm id}(G,F),\\
                    \mathcal{I}_{D}(D_X,D_Y) =&
                    \mathcal{L}_{\rm adv}^{D_X}(D_X)
                    +
                    \mathcal{L}_{\rm adv}^{D_Y}(D_Y),
                \end{align}
                其中，G，F分别代表X到Y的正向和逆向生成器。

                下一步，我们来看一下CycleGAN的神经网络结构。
                \begin{figure*}[h!]
                    \centerline{\includegraphics[width=\textwidth]{network}}
                    \vspace{-4.5mm}
                    \caption{生成器和判别器的结构。
                      输入层或者输出层中的
                      {\tt h}, {\tt w}, {\tt c} 代表
                      高度, 宽度, 通道数。
                      在卷积层，
                      {\tt k}, {\tt c}, {\tt s} 代表
                      卷积核大小, 通道数, 和步长。
                      $T$可以是任意值。}
                      %it can convert input of arbitrary length $T$ seamlessly.}
                    \label{fig:network}
                    \vspace{-6mm}
                  \end{figure*}
                可以发现的是，在网络结构中大量应用了GLU(具体一点就是Gated-CNN),残差网络(保证信息的完整性),归一化(Normalization)等等操作。可以说我觉得这个网络设计考虑的挺全面的。
                
                下面，我们看看整体的CycleGAN-VC的结构图示。
                \begin{figure*}[h!]
                    \centering
                    \includegraphics[width=.9\linewidth]{cyclegan-vc.eps}
                    \vspace{-1ex}
                    \caption{Concept of CycleGAN training.}
                    \label{fig:cyclegan-vc}
                \end{figure*}
                如图\ref{fig:cyclegan-vc}, G，F分别代表正向与逆向模型。结合上面的loss式子，不难理解CycleGAN的整体结构和训练过程。注意，CycleGAN-VC本质上还是GAN的延申，
                所以在训练时，每一个迭代步中要分别训练总生成器和总判别器，只不过在CycleGAN-VC模型中，总生成器由两个生成器组成，总判别器由两个判别器组成。
                CycleGAN-VC对声音转换取得了不错的效果，我觉得复现一下CycleGAN-VC的代码是很有意义的一件事情，
                不过这就是后话了。

                那么以上就是简要概述了一下CycleGAN-VC的原理和结构。我们知道CycleGAN-VC是一个one-to-one的声音转换模型。
                那么，如何进行many-to-many的声音转换呢？下面StarGAN-VC就完成了这个事情，某种程度上来说，StarGAN-VC与CycleGAN-VC有些相似。
                %\clearpage
        \subsubsection*{3.2.2 \quad StarGAN-VC}
            论文\cite{kameoka2018starganvc}所研究的方法名字叫StarGAN-VC。Many-to-many的任务比one-to-one稍微困难一些，many-to-many不可能以控制变量的方式去训练。在此论文中，
            仅仅建立了一个生成器模型G，通过这个生成器模型，可以把输出音频中的所有人声音全部转换为目标音频中的声音。和CycleGAN-VC一样，他具有很多的有点，比如不需要平行数据、训练快、推断快等等。
            这次我们换个介绍方法，上面是先介绍了loss的式子，这次我们先来看整体的结构。

            \begin{figure*}[h!]
                \centering
                {\includegraphics[width=.98\linewidth]{stargan-vc.eps}}
                \vspace{-1ex}
                \caption{Concept of StarGAN training.}
                \label{fig:stargan-vc}
            \end{figure*}
            下面来解释一下，我们最终的目标就是得到一个生成器G，这个生成器能够将含有多人语音的音频信息X转化成同样含有多人语音的音频信息Y。
            $C$是一个领域分类器(Domain Classifier)，就是说，C以Y或者经生成器生成的$G(x,c)$作为输入，能够预测出与Y或$G(x,c)$相对应的
            X中含有的人是谁。事实上，分类器C的输出结果是一个向量c, 代表着输入音频X中具有i这个人的概率是c[i]。
            判别器D以Y或者$G(x,c)$和指示X的具有谁的声音的向量c作为输入，需要判断是否来自原始数据Y还是来自生成器生成的假数据。
            生成器以输入音频X和指示X中声音信息的向量c作为输入，生成一个假的音频$G(x,c)$。注意，图片\ref{fig:stargan-vc}下方的G的输入为假数据$G(x,c)$和指示生成的假数据里面应该
            具有的哪些人的音频信息的向量$c^{'}$。可以容易理解的是，这个下方的G实际上对应着CycleGAN-VC中循环一致的部分。
            那么整个流程就比较明了了，我们相对应CycleGAN-VC来比较着说。

            首先对抗损失部分：
            \begin{align}
                \mathcal{L}_{\rm adv}^D(D) =& 
                - \mathbb{E}_{c\sim p(c), \Vec{y}\sim p(\Vec{y}|c)}[\log D(\Vec{y},c)] 
                \nonumber\\
                &- \mathbb{E}_{\Vec{x}\sim p(\Vec{x}), c\sim p(c)}
                [\log (1-D(G(\Vec{x},c),c))],
                \label{eq:advloss_d}
                \\
                \mathcal{L}_{\rm adv}^G(G) =&
                - \mathbb{E}_{\Vec{x}\sim p(\Vec{x}), c\sim p(c)}
                [\log D(G(\Vec{x},c),c)],
                \label{eq:advloss_g}
            \end{align}
            这一部分跟CycleGAN-VC很相似，不再过多赘述。
            
            然后是循环一致损失部分：
            \begin{align}
                \mathcal{L}_{\rm cyc}(G)
                = 
                \mathbb{E}_{c'\sim p(c), \Vec{x}\sim p(\Vec{x}|c'), c\sim p(c)}
                [\| G(G(\Vec{x},c),c') - \Vec{x}\|_\rho],
            \end{align}
            \begin{align}
                \mathcal{L}_{\rm id}(G) = 
                \mathbb{E}_{c'\sim p(c), \Vec{x}\sim p(\Vec{x}|c')}
                [\|G(\Vec{x},c') - \Vec{x} \|_\rho],
            \end{align}
            这一部分也跟GycleGAN-VC有极高的相似性，不再赘述。

            最后是领域分类器部分：
            \begin{align}
                \mathcal{L}_{\rm cls}^C(C) = &
                - \mathbb{E}_{c\sim p(c), \Vec{y}\sim p(\Vec{y}|c)}
                [\log p_C(c|\Vec{y})],
                \\
                \mathcal{L}_{\rm cls}^G(G) = &
                - \mathbb{E}_{\Vec{x}\sim p(\Vec{x}), c\sim p(c)}
                [\log p_C(c|G(\Vec{x},c))],
            \end{align}
            注意上面的$\mathcal{L}_{\rm cls}^C(C)$是用真实数据训练分类器C，而$\mathcal{L}_{\rm cls}^G(G)$是训练G，其实这一点的存在也让分类器C看起来像一个判别器。
            所以我们能写出来关于生成器，判别器，分类器分别的总的损失函数。
            \begin{align}
                \mathcal{I}_G(G) =
                &\mathcal{L}_{\rm adv}^{G}(G)
                +
                \lambda_{\rm cls}
                \mathcal{L}_{\rm cls}^{G}(G)
                \nonumber\\
                &+
                \lambda_{\rm cyc}
                \mathcal{L}_{\rm cyc}(G)
                +
                \lambda_{\rm id}
                \mathcal{L}_{\rm id}(G),
                \\
                \mathcal{I}_D(D) =
                &\mathcal{L}_{\rm adv}^{D}(D),
                \\
                \mathcal{I}_C(C) =
                &\mathcal{L}_{\rm cls}^{C}(C),
            \end{align}
            \begin{figure*}[h!]
                \centering
                  \centerline{\includegraphics[width=.8\linewidth]{netarch2.eps}}
                  \vspace{-1ex}
                  \caption{StarGAN-VC各组分结构}
                \label{fig:netarch}
            \end{figure*}
            具体的神经网络层组成不再过多赘述，如图\ref{fig:netarch}与CycleGAN-VC相似但也不是完全相似，主要就是卷积的利用。不过需要注意的是，CycleGAN-VC和StarGAN-VC
            的网络层次组成中有两个比较明显的不一样，StarGAN-VC利用了DeConv，并且移除了残差网络，也就是说StarGAN-VC的生成器是存在一个特征提取之后再decoder的过程。
            而CycleGAN-VC没有将deconv加入到生成器中，是否可以将CycleGAN-VC的生成器试一试加入DeConv，会不会使得CycleGAN-VC的效果更好？

        \subsubsection*{3.2.3 \quad StarGAN-VC+ASR}
            一看这个名字就跟上面的很像，实际上也是。StarGAN-VC虽然已经很好了，但是在训练样本比较少的时候，很有可能会出现无法保留音频信息的语音意义的问题。为了解决这个问题，论文\cite{sakamoto2021starganvcasr}提出了StarGAN-VC+ASR的方法。
            StarGAN-VC我们已经有所了解了，那么ASR是什么？ASR(automatic speech recognition)经常用于声音信息转换为文本信息。
            我们直接来看StarGAN-VC+ASR的具体连线过程。
            \begin{figure*}[h!]
                \begin{center}
                  \includegraphics[width=0.8\linewidth]{training_overview.pdf}
              
                  \caption{StarGAN-VC+ASR训练过程}
                      \vspace{-5mm}
                  \label{asr_overview}
                \end{center}
            \end{figure*}
            事实上，图片靠下方的$o$到$G_E$、$G_D$部分都是StarGAN-VC里面的内容，让我们回忆一下，StarGAN-VC里面有Conv和DeConv的部分，其实就是将StarGAN-VC的生成器分成了
            encoder和decoder两个部分，encoder提取特征，decoder解耦特征。而如何让提取到的特征(latent feature y)保留有语义信息，就是关键。
            在这里，论文利用了ASR去提取音频信息中语音的音素信息，什么是音素信息？可以理解为发音的音节，就是说我们每个单词，都是由几个音节构成的，那么ASR就可以提取到语音信息中的音素信息。
            实际上，ASR是语音转文本的一种技术，ASR分好几种，其中一种就是提取音素，然后利用音素来反推单词，当然了，利用音素反推单词的做法需要一些语言学的知识，这也是导致了音素在ASR任务中并不是最常见的方法，但是在我们
            这个任务当中，提取音素却不失为一种优秀的方法。

            论文中的思路就是，由于音素与语义信息有着很大的关联，那么如果我将latent feature y和音素建立起来高度的相关性，那么就可以说y具有了很高程度的语义信息。从图\ref{asr_overview}中可以看到,通过高斯混合模型，将y和音素信息Z关联，我们能优化神经网络结构。
            接着我们就来说说loss是如何进行表示的。
            \begin{align}
                \label{mu_p}
                    \mu_p =& 
                    \frac{1}{\sum^D_{d=1}\#(T_p(\hat{z}^d))}\sum^D_{d=1}\sum_{t \in T_p(\hat{z}^d)} y^d_t , \\
                \label{Sigma_p}
                    \Sigma_p =&
                    \frac{1}{\sum^D_{d=1}\#(T_d(\hat{z}^d))}\sum^D_{d=1}\sum_{t \in T_p(\hat{z}^d)} \left(y^d_t - \mu_p\right)\left(y^d_t - \mu_p\right)^T,
            \end{align}
            式子\ref{mu_p}和\ref{Sigma_p}用于建立latent feature y和音素之间的关系。限于篇幅和时间(刚开学真的很忙，作业也挺多的)。我们就不再展开说各个计算式子的意义，
            主要是这个模型也比较好理解，只需要牢记一点：通过这样的式子的调整，模型StarGAN-VC+ASR中的生成器部分的特征会天然的具有语义信息。具体的过程如果有兴趣可以了解论文\cite{sakamoto2021starganvcasr}.
            
        \subsubsection*{3.2.4 \quad Variational Autoencoder}

            这个方法有一个假设就是，音频信息可以被提取为两方面的特征，一方面是音色特征，一方面是语义特征。整篇论文围绕着这个假设开展。
            首先我们看看结构图。

            \begin{figure}[h!]
                \centering
                \subfloat[Training process]{%
                \includegraphics[width=2.6cm]{training_process.jpg}%
                \label{fig:2a}%
                }\qquad
                \subfloat[Conversion process]{%
                \includegraphics[width=2.6cm]{conversion_process.jpg}%
                \label{fig:2b}%
                }
                \caption{实线和虚线分别代表推断过程和生成过程。}
                \label{fig:2}
            \end{figure}

            注意，训练过程的x1，x2是来自同一个人的音频信息。所以我们就很好理解了，训练过程就是将同一个人的声音信息综合起来提取到一个人的音色信息$Z_s$，而且
            分别将同一个人的不同语句$x_1,x_2$提取出语义信息$z_c,z_c^{'}$。然后，在转换过程中，当我们输入一个源音频$X_{source}$，需要转换为目标音频$X_{target}$时，我们就将目标音频的音色信息和源音频的
            语义信息综合起来通过decoder来生成最终音频信息。当然，作者还应用了一些增加细节的方法(post-net)，最终得到一个损失函数。在这里，我们就不再细说具体的计算细节，有兴趣者可以查看论文\cite{luong2021manytomany}.

    \section*{\kaishu{四 \quad 应用}}
    % \begin{figure}[h!]
    %     \centering
    %     \includegraphics[width = 0.8\linewidth]{实验结果2.png}
    %     \caption{实验结果}
    %     \label{fig:实验结果}
    % \end{figure}
    目前来说，声音转换有至少以下应用。有利用voice conversion生成音乐的应用软件，也有歌唱声音修正(singing voice modification)，配音(dubbing)，
    自定义有声读物和头像声音(customizing audio book and avatar voices)等等。但是，需要注意的是，声音转换仍不是一个非常成熟的领域，所以各个应用
    的广泛性不足，局限性较大。
    \section*{\kaishu{五 \quad 展望分析}}
    我认为现在声音转换有以下研究的方向可以考虑。一方面是比较需要一些声音学的专业知识的，比如我们是否能通过一些数学处理的方法，直接得到一个人有关的
    音色信息，就是说不以神经网络处理的方法，用数学变换可以直接音色，或者音色相关的数据，相对来说这方面可能比较困难。
    另一方面，我们如何继续优化GANs能够能好的使得GAN学习到音色和语义两方面的信息，即GANs神经网络变体优化。
    再一方面，我们如何优化VAEs，使得VAEs能对两方面特征更好的合成。
    最后一方面，也是更加困难的一方面，我们能否重新设计一种不同于GAN，也不同于VAE的新式神经网络结构，能够更好地处理声音转换任务？这都是值得我们思考的问题。
    \bibliography{bibfile.bib}
\end{document}